package sdw.ufal.p3.form;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.struts.validator.ValidatorForm;

public class SDWBaseForm extends ValidatorForm {

	private static final long serialVersionUID = -2290623616920168780L;
	
	private String id; 
	private String actionType;	
	private String origemErro;
	private int nextPage;
	private Boolean continuarCadastrando; // quando é null, não exibe o check de "continuar cadastrando"

	public SDWBaseForm() {
		this.setId(null);
		this.setActionType(null);
		this.setOrigemErro(null);
		this.setPage(1);
		this.setNextPage(0);
		this.setContinuarCadastrando(null);
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getActionType() {
		return actionType;
	}

	public void setActionType(String actionType) {
		this.actionType = actionType;
	}

	public String getOrigemErro() {
		return origemErro;
	}

	public void setOrigemErro(String origemErro) {
		this.origemErro = origemErro;
	}

	public Boolean isContinuarCadastrando() {
		return continuarCadastrando;
	}

	/*
	 * Além do "is" deve-se criar o "get", para poder acessar na jsp, quando 
	 * se usa, por exemplo, sessionScope['FormName'].continuarCadastrando
	 */
	public Boolean getContinuarCadastrando() {
		return continuarCadastrando;
	}
	
	/**
	 * Quando é passado o valor null como parâmetro, indica que 
	 * não é para exibir o check de "continuar cadastrando"  
	 * @param continuarCadastrando
	 */
	public void setContinuarCadastrando(Boolean continuarCadastrando) {
		this.continuarCadastrando = continuarCadastrando;
	}

	public int getNextPage() {
		return nextPage;
	}

	public void setNextPage(int nextPage) {
		this.nextPage = nextPage;
	}
	
    
    public boolean dataValida(String dateStr,
    		 				  String formatStr)
    {
    	 if (formatStr == null) return false; 
    	 
    	 SimpleDateFormat df = new SimpleDateFormat(formatStr);
    	 Date testDate = null;
	     
    	 try {
    		 testDate = df.parse(dateStr);
	     } catch (Exception e) {
	    	 return false;
	     }
	     
	     Calendar cal = Calendar.getInstance();
	     cal.set(Calendar.HOUR_OF_DAY, 0);
	     cal.set(Calendar.MINUTE, 0);
	     cal.set(Calendar.SECOND, 0);
	     cal.set(Calendar.MILLISECOND, 0);

	     if (!df.format(testDate).equals(dateStr)) 
	    	 return false;
	     
	     return true;
    }
    
    public boolean horarioValido(String horario, int horaInicio, int minutoInicio, int horaFim, int minutoFim) {
    	
    	boolean valido = horarioValido(horario);
    	if (valido) {
    		String [] tokensHora = horario.split(":");
    		int hora    = Integer.parseInt( tokensHora[0] );
    		int minuto   = Integer.parseInt( tokensHora[1] );
    		valido = (hora >= horaInicio && minuto >= minutoInicio && hora <= horaFim && minutoFim <= minutoFim); 
    	}
    	
    	return valido;
    }
    
    public boolean horarioValido(String horario) {
    	if ( horario != null && horario.length() == 5 && horario.indexOf(":") == 2 ) {
			try {
				String [] tokensHora = horario.split(":");
				Integer hora 	   = Integer.parseInt( tokensHora[0] );
				Integer minuto 	   = Integer.parseInt( tokensHora[1] );
				if ( hora <= 23 && minuto < 60 ) {
					return true;
				}
			} catch (Exception e) {}
		}
    	return false;
    }
}
